package com.ruoyi.web.utils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 检查String是否是英文、中文繁体、日语、韩语中某一个
 */
public class LanguageCheckerUtils {

    // 包含越南语特有字符的集合
    private static final String VIETNAMESE_CHARACTERS = "áàảãạâêěêëìíĩĩỉịòóõôõöùúũưừứửữựỳýỷỹđ";

    public static void main(String[] args) {
//        String language = queryChecker("樂山雷達站");
//        System.out.println("language = " + language);
//        String Japanese = queryChecker("航空自衛隊（こうくうじえいたい、英: Japan Air Self-Defense Force、略称: JASDF）は、日本の自衛隊のうち、航空宇宙を任務とする部門。日本語略称は、空自（くうじ）。大気圏内での防空や偵察、空輸及びスペースデブリなど宇宙空間の監視を任務とする[1]");
//        System.out.println("Japanese = " + Japanese);
//        String korean = queryChecker("항공자위대(こうくうじえいたい 고쿠 지에이타이[*], 영어: Japan Air Self Defense Force, JASDF)는 공군과 우주군에 해당하는 자위대의 구성군으로 일본 영공의 방위, 경비, 사이버전, 전자전 등의 임무를 수행한다. 항공자위대는 일본 영공의 방위를 수호하면서 지상, 공중 조기 경보 레이더 시스템을 유지한다. 해당 구성군에는 블루 임펄스 곡예비행팀이 소속되어 있으며 유엔 평화유지임무에 항공수송을 제공한 바가 있다.");
//        System.out.println("korean = " + korean);
        String china = queryChecker("สวัสดี");
        System.out.println("china = " + china);
    }

    public static String queryChecker(String str) {
        /**
         * ① en ：英文翻译为中文。
         * ② ge ：德语翻译为中文。
         * ③ ja：日语翻译为中文。
         * ④ ko：韩语(朝鲜语)翻译为中文
         * hi: 印度语
         * ru: 俄语
         * vi: 越南语
         * th: 泰语
         */
        String languageType = "en";
        if (isSimplifiedChinese(str)) {
            languageType = "zh";
        }
        if (isTraditionalChinese(str)) {
            languageType =  "traditionalChinese";
        }
        if (isKorean(str)) {
            languageType = "ko";
        }
        if (isJapanese(str)) {
            languageType = "ja";
        }
        if (isHindi(str)) {
            languageType = "hi";
        }
        if (isRussianCharacters(str)) {
            languageType = "ru";
        }
        if (isVietnamese(str)) {
            languageType = "vi";
        }
        if (isThai(str)) {
            languageType = "th";
        }
        return languageType;
    }

    public static boolean isTraditionalChinese(String str) {
        for (char c : str.toCharArray()) {
            if (c >= '\u4E00' && c <= '\u9FFF') {
                return true; // 如果字符串中包含繁体中文字符，则返回 true
            }
        }
        return false;
    }

    public static boolean isEnglish(String str) {
        return Pattern.matches("[a-zA-Z]+", str);
    }

    public static boolean isJapanese(String str) {
        for (char c : str.toCharArray()) {
            if ((c >= '\u3040' && c <= '\u30FF') || // 平假名和片假名
                    (c >= '\uFF00' && c <= '\uFFEF')) {  // 全角ASCII
                return true; // 如果字符串中包含日文字符，则返回 true
            }
        }
        return false; // 否则返回 false
    }

    public static boolean isKorean(String str) {
        for (char c : str.toCharArray()) {
            if (c >= '\uAC00' && c <= '\uD7A3') {
                return true; // 如果字符串中包含韩文字符，则返回 true
            }
        }
        return false; // 否则返回 false
    }

    public static boolean isSimplifiedChinese(String str) {
        for (char c : str.toCharArray()) {
            if (c < '\u4e00' || c > '\u9fa5') {
                return false;
            }
        }
        return true;
    }

    public static boolean isHindi(String input) {
        if (input == null || input.isEmpty()) {
            return false;
        }

        Pattern pattern = Pattern.compile("\\p{IsDevanagari}+");
        Matcher matcher = pattern.matcher(input);

        // Check if the input contains any Devanagari script characters
        return matcher.find();
    }

    public static boolean isRussianCharacters(String input) {
        if (input == null || input.isEmpty()) {
            return false;
        }
        for (char c : input.toCharArray()) {
            // 检查字符是否在俄语的Unicode范围内
            if (c >= '\u0400' && c <= '\u04FF') {
                return true;
            }
        }
        return false;
    }
    /**
     * 判断字符串是否包含越南语字符
     *
     * @param input 输入字符串
     * @return 如果包含越南语字符，则返回true；否则返回false
     */
    public static boolean isVietnamese(String input) {
        if (input == null || input.isEmpty()) {
            return false;
        }
        for (char ch : input.toCharArray()) {
            if (VIETNAMESE_CHARACTERS.indexOf(ch) >= 0) {
                return true;
            }
        }
        return false;
    }

    private static final int THAI_START = 0xE00;
    private static final int THAI_END = 0xE7F;

    /**
     * 判断字符串是否包含泰语字符
     *
     * @param input 输入字符串
     * @return 如果包含泰语字符，则返回true；否则返回false
     */
    public static boolean isThai(String input) {
        if (input == null || input.isEmpty()) {
            return false;
        }
        for (char ch : input.toCharArray()) {
            if (ch >= THAI_START && ch <= THAI_END) {
                return true;
            }
        }
        return false;
    }

}
